package cn.dengta.context.model;

import java.util.Date;

import cn.dengta.common.util.Formats;
import me.codeplayer.util.EasyDate;

/***
 * 全局共享的 Redis 键
 */
public interface RedisKey {

	public static final EasyDate begin_date = new EasyDate(2024, 5, 1);

	/** 可能是APP上架审核期间，由审核人员注册的用户（目前仅限 iOS） */
	String APP_STORE_USERS = "app_store:users";
	/** logo */
	String LOGO_KEY = "app:logo";
	/** APP审核版本 */
	String APP_VERSION = "app_version:";
	/** 用户的客户端版本（Hash） */
	String USER_VERSIONS = "user_versions";

	/** 用户的IP */
	String USER_IP = "user_ip";
	/** 用户操作分布式锁前缀 */
	String USER_OPERATE_LOCK_PREFIX = "user:lock:";
	/** 活动操作分布式锁前缀 */
	String ACTIVITY_OPERATE_LOCK_PREFIX = "act:lock:";
	/** 元数据配置 */
	String META_CONFIGS = "meta_configs";
	/** 元数据 */
	String META = "meta";
	/** 广告ID */
	String advertId = "advertId:";
	/** Adjust 设备 ID */
	String adjustId = "adjustId:";

	// ================ user ================

	/** 短信验证码自主认证（用于延长操作时长，短信只有10分钟） */
	String AUTH_SMS_CAPTCHA = "auth_sms_captcha:";
	/** 举报类型loader */
	String COMPLAIN_TYPE_LOADER = "complain_type_loader:";
	/** 电视墙配置数据loader */
	String TV_WALL_CONFIG_LOADER = "tv_wall_config_loader:";
	/** 用户喜欢关系loader */
	String USER_RELATION_LOADER = "user_relation_loader:";
	/** 万能验证码 */
	String GLOBAL_CAPTCHA = "@captcha";
	/** 万能验证码对应的登录白名单 */
	String CAPTCHA_WHITE_ACCOUNTS = "captcha:white_accounts";
	/** IP登录白名单 */
	String IP_WHITE_ACCOUNTS = "ip:white_accounts";
	/** IP登录白名单的开关 */
	String IP_WHITE_ACCOUNTS_TOGGLE = "ip:white_account_toggle";
	/** 限制设备访问 */
	String DEVICE_LIMIT_ACCESS = "device_limit_access";
	/** 用户等级分布式锁前缀 */
	String USER_LEVEL_LOCK_PREFIX = "userLevel:lock:";
	/** IP 黑名单 */
	String IP_BLACK_LIST = "ip:blacklist";

	// ================ im ================

	/** 缘分雷达禁用用户 */
	String FATE_RADAR_FORBID_USER = "fate_radar_forbid_user";
	/** 音视频拨通率统计 */
	String IM_CALL_RATE = "IM:callRate";
	/** 亲密度 */
	String INTIMACY_COMMON = "intimacy:common";
	/** 财富 */
	String INTIMACY_CONSUMER = "intimacy:consumer";
	/** 魅力 */
	String INTIMACY_INCOME = "intimacy:income";
	/** 被封禁的直播用户（ ZSet< 用户ID, 封禁到期时间（秒级时间戳） >） */
	String FROZEN_LIVE_USERS = "frozen_live_users";
	/** 用户等级经验 */
	String USER_LEVEL_EXP = "user:levelExp";
	/** 勿扰模式设置（牵线、破冰、速配、视频、语音） */
	String IM_CALL_DISTURB = "im:call_disturb";

	// ================ trade ================

	String USER_FROZEN_COIN_HASH_PREFIX = "USER_FROZEN_COIN:HASH:";

	static String userFrozenCoinHashKey(long userId) {
		return USER_FROZEN_COIN_HASH_PREFIX + userId;
	}

	String USER_ACTIVE_COIN_HASH_KEY = "@userActiveCoin";
	String USER_FROZEN_COIN_LOCK_PREFIX = "USER_FROZEN_COIN_LOCK:";

	/** 礼物分类数据loader */
	String GIFT_CATEGORY_LOADER = "gift_category_loader:";
	/** 礼物数据loader */
	String GIFT_LOADER = "gift_loader:";
	/** 用户等级规则类型loader */
	String USER_LEVEL_RULE_LOADER = "ruleLoader:user_level";

	/** 任务规则类型loader */
	String TASK_RULE_LOADER = "task_rule_loader:";
	/** 国内风控白名单 */
	String RISK_WHITE_LIST_CN = "risk_white_list_cn";
	/** 最后几天收入总数 */
	String USER_INCOME_LAST_DAY_SUM_RANKING = "user_income_sum:last_day:ranking";
	/** 新用户搭讪次数 */
	String NOW_USER_GREET_COUNT_ZSET = "now_user_greet_count_zset";
	/** 新用户满足加入推荐白名单的时间 */
	String NOW_USER_WHITE_TIME_ZSET = "now_user_white_time_zset";

	/** 用户活跃奖励指标数据  map */
	String ACTIVE_REWARD = "active_reward_quota:";
	/** 用户活跃奖励回复人数 map */
	String ACTIVE_REWARD_REPLY = "active_reward_reply:";
	/** 用户活跃奖励回复关系 */
	String ACTIVE_REWARD_REPLY_RELATION = "active_reward_reply_relation:";
	/** 用户活跃奖励在线时间 map */
	String ACTIVE_REWARD_ONLINE = "active_reward_online:";
	/** 用户活跃奖励已完成任务的 map */
	String ACTIVE_REWARD_TASK = "active_reward_task:";
	/** AI 操作锁 */
	String AI_OPERATE_LOCK_PREFIX = "ai_operate_lock_prefix:";

	static String getAiOperateLockPrefix(Long aiId) {
		return AI_OPERATE_LOCK_PREFIX + aiId;
	}

	/** AI 用户 操作锁 */
	String AI_USER_OPERATE_LOCK_PREFIX = "ai_uer_operate_lock_prefix:";

	static String getAiUserOperateLockPrefix(Long aiId, Long userId) {
		return AI_USER_OPERATE_LOCK_PREFIX + aiId + ":" + userId;
	}

	/** 充值风控停止推荐 */
	String PAY_RISK_STOP_REC = "pay_risk_stop_rec:";
	/** 充值分钟短信限流 */
	String PAY_RISK_SMS_LIMIT = "pay_risk_sms_limit:";
	/**
	 * 聊郁：
	 * 海外IP审核开关 ：国外IP审核开关，打开就是国外IP屏蔽，显示审核中的功能，关闭就是，国外IP不受限制，显示正常功能。
	 */
	String IP_AUDIT_SWITCH = "ip_audit_switch";
	/** 审核环境推广员黑名单 */
	String AGENT_BLACK_AUDIT_SET_DATA = "agent_black_audit_set_data";


	/** 发奖缓存 */
	String GODDESS_WEEK = "goddess_week:";

	static String getGoddessWeek(Long userId, Integer type) {
		return GODDESS_WEEK + userId + ":" + type;
	}

	/** 女神活动已使用免费招呼 */
	String GODDESS_FREE_GREET_USED = "goddess_greet_free_used:";

	static String getGoddessFreeGreetUsed(Long userId) {
		return GODDESS_FREE_GREET_USED + userId;
	}


	/** 女神活动上月弹窗 */
	String GODDESS_LAST_MONTH_POP = "goddess_last_month_pop:";


	static String getGoddessLastMonthPop(Long userId, int year, int month) {
		return GODDESS_LAST_MONTH_POP + userId + ":" + year + ":" + month;
	}

	/** 是否有女神勋章 */
	String GODDESS_HAS_MEDAL = "goddess_has_medal:";

	static String getGoddessHasMedal(Long userId) {
		return GODDESS_HAS_MEDAL + userId;
	}

	/** 是否有HOST*/
	String GODDESS_HAS_HOTS = "goddess_has_hot:";

	static String getGoddessHasHots(Long userId) {
		return GODDESS_HAS_HOTS + userId;
	}

	/** 任务是否已完成*/
	String GODDESS_TASK_COMPLETED = "goddess_task_completed:";

	static String getGoddessTaskCompleted(Long userId) {
		return GODDESS_TASK_COMPLETED + userId;
	}



	/** 用户周期内待回复次数 */
	String IM_USER_BEGIN_WAIT_REPLY_COUNT_PREFIX = "im_user_begin_wait_reply_count:";

	static String getImUserBeginWaitReplyCountPrefix(Long userId, Date begin) {
		return IM_USER_BEGIN_WAIT_REPLY_COUNT_PREFIX + userId + ":" + Formats.formatDate_D(begin);
	}

	/** 用户待回复 key */
	String IM_USER_WAIT_REPLY_PREFIX = "im_user_wait_reply:";

	static String getImUserWaitReplyPrefix(Long userId, Long fromUserId, Date begin) {
		return IM_USER_WAIT_REPLY_PREFIX + userId + ":" + fromUserId + ":" + Formats.formatDate_D(begin);
	}

	/** 用户周期内2分钟内回复次数 */
	String IM_USER_BEGIN_2_REPLY_COUNT_PREFIX = "im_user_begin_2_reply_count:";

	static String getImUserBegin2ReplyCountPrefix(Long userId, Date begin) {
		return IM_USER_BEGIN_2_REPLY_COUNT_PREFIX + userId + ":" + Formats.formatDate_D(begin);
	}

	String AGORA_USER_CALL_PREFIX = "AGORA:user:call:";

	static String agoraUserCall(Long userId) {
		return AGORA_USER_CALL_PREFIX + userId;
	}

	String AGORA_CHANNEL_PREFIX = "AGORA:channel:";

	static String mediaChannelKey(String channelName) {
		return AGORA_CHANNEL_PREFIX + channelName;
	}

	/**
	 * 其它信息
	 * price=1
	 */
	static String mediaChannelOtherKey(String channelName) {
		return mediaChannelKey(channelName) + "_other";
	}

	/** AI 通话元数据 */
	String IM_AI_CALL_META = "IM:AI:CALL_META:";


}
